﻿using UnityEngine;
using System.Collections;

namespace TowerDefence
{
    [RequireComponent(typeof(Enemy))]
    public class EnemyMovement : MonoBehaviour
    {
        private PlayerStats playerStats; // 玩家状态
        private Enemy enemy; // 敌人

        private Transform target; // 目标位置
        private int waypointIndex = 0; // 路径点索引

        public int route; // 路线编号
        private Transform[] waypoints; // 路径点数组

        bool stopMove; // 是否停止移动

        public float attackSpeed = 1; // 攻击速度
        float timer; // 计时器

        void Start()
        {
            playerStats = PlayerStats.instance; // 获取玩家状态的实例
            enemy = GetComponent<Enemy>(); // 获取敌人组件

            // 根据不同的路线编号设置路径点数组
            if (route.Equals(0))
            {
                waypoints = Waypoints.points;
            }
            else if (route.Equals(1))
            {
                waypoints = Waypoints.points01;
            }
            else if (route.Equals(2))
            {
                waypoints = Waypoints.points02;
            }
            else if (route.Equals(10))
            {
                waypoints = Waypoints.points03;
            }
            else if (route.Equals(11))
            {
                waypoints = Waypoints.points04;
            }

            target = waypoints[0]; // 设置初始目标为第一个路径点
            timer = attackSpeed; // 初始化计时器为攻击速度
        }

        void Update()
        {
            if (enemy.isDead) // 如果敌人已经死亡，则返回
                return;

            if (Vector3.Distance(target.position, transform.position) < 0.5f) // 如果敌人到达目标位置附近
            {
                GetNextWaypoint(); // 获取下一个路径点
            }

            if (stopMove == true) // 如果停止移动标志为真，则返回
                return;

            Vector3 dir = target.position - transform.position; // 计算敌人朝向目标的方向

            // 平滑旋转敌人朝向目标方向
            transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), enemy.rotSpeed * Time.deltaTime);

            // 沿着目标方向移动敌人
            transform.Translate(dir.normalized * enemy.speed * Time.deltaTime, Space.World);

            if (GameItemManager.freezeEnemies) // 如果冻结敌人的道具被激活
                enemy.speed = 0; // 将敌人速度设置为0
            else if (enemy.slowDuration <= 0) // 如果减速时间小于等于0
                enemy.speed = enemy.startSpeed; // 恢复敌人初始速度

            enemy.slowDuration -= Time.deltaTime; // 减少减速时间
        }
        // 获取下一个路径点的方法
        private void GetNextWaypoint()
        {
            if (waypointIndex >= waypoints.Length - 1)
            {
                EndPath(); // 调用结束路径方法
                return;
            }

            waypointIndex++; // 增加路径点索引
            target = waypoints[waypointIndex]; // 设置目标为下一个路径点
        }

        // 结束路径的方法
        private void EndPath()
        {
            stopMove = true; // 停止移动标志为真
            enemy.anim.SetBool(StringData.idle, true); // 设置敌人动画为闲置状态
            enemy.speed = 0; // 将敌人速度设置为0

            timer -= Time.deltaTime; // 减少计时器

            if (timer <= 0) // 如果计时器小于等于0
            {
                timer = attackSpeed; // 重置计时器为攻击速度
                enemy.anim.SetTrigger(StringData.attack); // 激活敌人的攻击动画
                playerStats.UpdateHealth(enemy.attackDamage); // 更新玩家健康值
            }
        }

    }
}
